⬜import.meta.urlを使えるようにする (ScrapJupyter)
現状
import.meta.urlを任意のコードブロック記法とimport先コードの中で使えない
原因
(async()=>{...})()で全体を囲ってしまっているので、ESmodule限定の機能が使えなくなっている
対策
(async()=>{...})()で囲ったコードをesbuildでiifeに再変換する
こうするとimport.meta.urlをiifeで実行できるように変換してくれる
e.g.
code:sh
$ echo "console.log(import.meta.url)" | esbuild --minify --format=iife
(()=>{const o={};console.log(o.url);})();
07:38:48 これだけだとだめだ
URL不明のesm codeにbundleされる時点で、全てのimport.meta.urlの情報が消えている
pluginの段階でimport.meta.urlを変換しないとどうにもならない
追加の対策
onLoadのときに、全てのimport.meta.urlをファイルパスに文字列置換する
限界
const {url} = import.metaみたいなことをされたら詰む
const {meta: {url}} = importはあり得ない
#Inject | esbuild - APIでexport const import = {meta: {url: ESBUILD_IMPORT_META_URL}}を挿入したあと、onLoadでconst ESBUILD_IMPORT_META_URL = "https://..."を追加する 本当にこれでうまくいくかは、実際に試してみないとわからない
2021-12-31 11:11:50 import.meta.urlの仕様を調べるためにGoogle検索してたら1ページ目の最後にこのページが出てきて困惑した
単にpersonalizeされているだけ……だよね?
テスト
code:js
import "./test.ts";
code:test.ts
alert(import.meta.url)